1. Field of the Invention
The present invention relates generally to the field of computer-based product configuration.
2. Background Description
Configuring a product refers to the process of selecting, constructing, and connecting components to satisfy a particular need or request. Configuring a product has been described, for example, in U.S. Pat. No. 5,515,524 entitled “Method and Apparatus for Configuring Systems”, inventors J. Lynch and D. Franke. If a product is based on a limited number of components, the process of configuring the product can be relatively straightforward. “Component” and “part” are often used interchangeably to denote the elements of a product.
As product specifications become more customized and varied, configuration alternatives increase and the task of configuring a product becomes more complex. An example of a complex product is a telecommunications switching system. The available configuration alternatives of a telecommunications switching system are numerous and varied, including alternatives available when choosing the equipment racks, shelves, communications boards, power supply, consoles, cables, and software.
Configuring a product generally requires compatibility between a selected component and other components in the configured product. For example, a power supply must generally be sufficient to supply power to all of the components of the product receiving power from the power supply. An equipment shelf has only a certain number slots to handle all of the boards installed in that shelf.
To address the problem of configuring complex products, configuration modeling software for automating the configuration process has been developed. Configuration modeling software is particularly applicable to constraint-based configuration systems. In general terms, a constraint-based system places constraints on the use of a component in a configuration. For example, a hard disk drive cannot be added to the configuration unless a compatible storage device controller is available for use by a requested storage device. The requirement of a controller is a “constraint” on the hard disk drive.
While the configuration modeling software can address configurations for complex products, the configuration modeling software itself is generally very complex and requires a high level of skill and effort to maintain and to create new product configurations. In addition, even simple modifications to the configuration modeling software may require significant time and effort to implement, leading to significant cost and expense.
Thus, creating systems for configuration of complex products such as telecommunications systems is a complex task for the following reasons:                1. The problem itself is difficult given the enormous number of combinations to be considered when searching through the space of configurable solutions; and        2. Creating a representation of the product (classes, components and configuration logic) that is easy to maintain and extend is very difficult, often requiring advanced programming skill and deep domain knowledge.        
The activity of creating a representation of some product to be configured by a configuration engine is generally called “configuration modeling”, or more simply “modeling.” This activity includes the following tasks:                1. Identifying the components that make up the product being configured, and representing them in the modeling language. These are physical things such as circuit boards, cables, shelves, racks, etc.        
2. Identifying the logic required to configure the components. Note: “logic” refers to relationships between components which can be, for example, functional or physical such as how the components are connected, e.g. a circuit board is slotted in a particular slot.                3. Creating abstractions of the components to allow the configuration engine to solve a configuration problem more efficiently and take advantage of inheritance, encapsulation (data hiding) and other object-oriented features provided by most modern programming languages.        4. Implementing the often-complex configuration conditions in the representation or modeling language of the configuration engine. Configuration conditions can be expressed in a variety of ways including as rules and constraints.        5. Creating a model that is both maintainable and extensible. It should be easy to add new parts and logic, without invalidating the existing model.        
Tasks 1–2 require deep domain knowledge of the type typically held by product managers or engineers (the “product expert”) in the company that manufactures or sells the product. Tasks 3–5 require advanced programming skill and a high-degree of domain knowledge, typically held by programmers (the “modeler”).
One of the difficulties and significant source of expense in modeling a product results from the fact that it is rare that one individual possesses the knowledge required for tasks 1–5.